Обзор архитектуры
Модуль - это Docker-контейнер, который получает данные из внешней системы (CMDB, сканер, API) и передает их в SolarLighthouse в виде структурированных ассетов (хосты, аккаунты, сети, внешние адреса).
Схема взаимодействия
┌─────────────┐ ┌──────────────┐ ┌────────────┐ ┌───────────────┐
│ Внешняя │ │ Модуль │ │ Keeper │ │ Asset Manager │
│ система │◄────│ (ваш код) │◄────│ (module- │◄────│ │
│ (REST API) │ │ Docker │ │ manager) │ │ │
└─────────────┘ └──────────────┘ └────────────┘ └───────────────┘
│ │ │
│ GET /scan/status │ │
│◄───────────────────│ │
│ {status, data} │ │
│───────────────────►│ bulk import │
│ │───────────────────►│
│ POST /scan/ │ │
│ got-packet │ │
│◄───────────────────│ │
│ │ │
│ POST /scan/ │ │
│ shutdown │ │
│◄───────────────────│ │
Потоки данных:
-
exs-go (Execution Service) инициирует запуск модуля через авторуло (autorule)
-
Keeper (module-manager) скачивает Docker-образ модуля и запускает контейнер, передавая конфигурацию через
config.yaml -
Модуль запускается, подключается к внешней системе, собирает данные и складывает их в SDK storage
-
Keeper периодически опрашивает
GET /scan/statusмодуля -
Когда данные готовы (статус
ASSETS_READY), Keeper забирает пакеты данных и отправляет в Asset Manager через bulk import -
После получения данных Keeper отправляет
POST /scan/got-packetдля подтверждения -
По завершении Keeper отправляет
POST /scan/shutdownдля остановки контейнера
Ваша задача как разработчика модуля
Вам нужно написать одну функцию (custom_func), которая:
-
Подключается к внешнему API
-
Получает данные (хосты, ПО, сетевые интерфейсы и т.д.)
-
Преобразует их в модели SDK (
CollectionHost,Package,NetInterfacesи др.) -
Складывает в storage через
scan_status_storage.append_host_in_storage()
Всю работу по HTTP-серверу, чанкингу данных, управлению статусами и взаимодействию с Keeper берет на себя SDK.